import { createStore } from 'vuex'
// 引入持久化插件
import createPersistedState from 'vuex-persistedstate'
// 定义一个接口，处理menus的数据
interface State {
  menus: MenuObj[]
}

interface MenuObj {
  parentId: number
  id: number
  children?: MenuObj[]
}
interface NewMenus {
  [key: number]: MenuObj
}

const store = createStore<State>({
  state: {
    menus: [],
  },
  mutations: {
    updataMenus(state, payload) {
      state.menus = payload
    },
  },
  actions: {},
  getters: {
    // 在这里处理数据，因为后台返回的menus里面，一级菜单和二级菜单在一块的，所以需要给数据作二次处理。
    // 二级菜单的parentId就是一级菜单的id
    getNewMenus(state) {
      let newMenus: NewMenus = {}
      // 获取旧的菜单
      let menus = state.menus
      // 遍历
      for (let i = 0; i < menus.length; i++) {
        if (menus[i].parentId === 0) {
          // 一级菜单对象
          newMenus[menus[i].id] = {
            ...menus[i],
            // 这里需要给一级菜单添加一个children属性，防止报错。
            children: newMenus[menus[i].id]?.children || [],
          }
        } else {
          // {{117:{...}}}
          // 二级菜单对象
          let parentId = menus[i].parentId // 对应一级菜单的id
          // 保证  newMenus[parentId] 是一个空对象
          newMenus[parentId] = newMenus[parentId] || {}
          // 保证 newMenus[parentId].children 是一个空数组
          newMenus[parentId].children = newMenus[parentId].children || []
          newMenus[parentId].children?.push(menus[i])
        }
      }
      return newMenus
    },

    // 二级菜单的parentId就是一级菜单的id
    // 一级菜单，订单(id：117)，营销(id:118)，权限(id:97)，商品(id:99)
    // getOneMenus(state) {
    //   return state.menus.filter((item) => item.parentId == 0)
    // },
    // // 二级订单列表
    // getOrderMenus(state) {
    //   return state.menus.filter((item) => item.parentId == 117)
    // },
    // // 二级营销列表
    // getSmsMenus(state) {
    //   return state.menus.filter((item) => item.parentId == 118)
    // },
    // // 二级权限列表
    // getUmsMenus(state) {
    //   return state.menus.filter((item) => item.parentId == 97)
    // },
    // // 二级商品列表
    // getProductMenus(state) {
    //   return state.menus.filter((item) => item.parentId == 99)
    // },
  },
  modules: {},
  plugins: [createPersistedState()], // 注入持久化插件
})

export default store
